home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / MYMUD21.ZIP / MMUD21.ZIP / SOURCE / SOURCE.ZIP / BOOLEXPR.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-01-21  |  3.0 KB  |  153 lines

  1. {$I COPYRGHT.INC}
  2. {$B+}
  3. (*---------------------------------------------------------------------------*
  4.    This unit implements the boolean evaluator for evaluating the KEY field.
  5.  *---------------------------------------------------------------------------*)
  6.  
  7.  
  8. Unit BoolExpr;
  9. Interface
  10. Uses BIN_DB;
  11.  
  12.  
  13. Function Expression( Expr       : String;
  14.                      Current    : ContextType):Boolean;
  15.  
  16. Implementation
  17.  
  18.  
  19. Function CleanSpaces(S : String):String;
  20. Begin
  21. While Pos(' ',S)>0 Do
  22.  Delete(S,Pos(' ',S),1);
  23. CleanSpaces:=S;
  24. End;
  25.  
  26.  
  27. Var ExpPtr : Byte;
  28.  
  29. Function BoolExpression( S          : String;
  30.                          CurrPlayer : Integer;
  31.                          CurrRoom   : Integer):Boolean;
  32.  
  33. Function Check(ObjNr : Integer;CurrPlayer : Integer):Boolean;
  34. Var Tmp : Database;
  35. Begin
  36. Tmp.Init;
  37. Tmp.ReadObj(ObjNr);
  38. If Tmp.IsPlayer
  39.    Then Check:=ObjNr=CurrPlayer
  40.    Else Check:=Tmp.ObjRec.Location=CurrPlayer;
  41. Tmp.Final;
  42. End;
  43.  
  44. Function CheckLevel(CurrPlayer : Integer;Level : Char):Boolean;
  45. Var Tmp : Database;
  46.     Lev : Byte;
  47. Begin
  48. Tmp.Init;
  49. Tmp.ReadObj(CurrPlayer);
  50. Lev:=Pos(Level,' PBWG');
  51. If (Lev=0) Or
  52.    (Tmp.ObjRec.ObjLevel>=(Lev-1))
  53.    Then CheckLevel:=True
  54.    Else CheckLevel:=False;
  55. Tmp.Final;
  56. End;
  57.  
  58.  
  59. Function Peek:Char;
  60. Begin
  61. If ExpPtr>Length(S)
  62.    Then Peek:=#00
  63.    Else Peek:=S[ExpPtr]
  64. End;
  65.  
  66. Function GetChar:Char;
  67. Begin
  68. If ExpPtr>Length(S)
  69.    Then GetChar:=#00
  70.    Else Begin
  71.         GetChar:=S[ExpPtr];
  72.         Inc(ExpPtr);
  73.         End;
  74. End;
  75.  
  76. Procedure Skip;
  77. Begin
  78. Inc(ExpPtr);
  79. End;
  80.  
  81. Function GetConst:Integer;
  82. Var Temp : Integer;
  83. Begin
  84. Temp:=0;
  85. While Peek in ['0'..'9'] Do
  86.  Temp:=(Temp*10)+(Ord(GetChar)-48);
  87. GetConst:=Temp;
  88. End;
  89.  
  90. Function SimpleExpression:Boolean;Forward;
  91.  
  92. Function Factor:Boolean;
  93. Var Temp : Boolean;
  94. Begin
  95. If Peek in ['(','!','@']
  96.    Then Begin
  97.         Case GetChar Of
  98.          '!' : Temp:=Not SimpleExpression;
  99.          '(' : Begin
  100.                Temp:=SimpleExpression;
  101.                Skip;
  102.                End;
  103.          '@' : Temp:=CheckLevel(CurrPlayer,GetChar);
  104.         End; {CasE}
  105.         End
  106.    Else Begin
  107.         If Peek in ['0'..'9']
  108.            Then Temp:=Check(GetConst,CurrPlayer);
  109.         If Peek='$'
  110.            Then Temp:=Random(100)>50;
  111.         End;
  112. Factor:=Temp;
  113. End;
  114.  
  115. Function Term:Boolean;
  116. Var Temp : Boolean;
  117. Begin
  118. Temp:=Factor;
  119. If Peek='&'
  120.    Then Begin
  121.         Skip;
  122.         Temp:=Temp And Factor;
  123.         End;
  124. Term:=Temp;
  125. End;
  126.  
  127. Function SimpleExpression:Boolean;
  128. Var Temp : Boolean;
  129. Begin
  130. Temp:=Term;
  131. If Peek ='|'
  132.    Then Begin
  133.         Skip;
  134.         Temp:=Temp Or Term;
  135.         End;
  136. SimpleExpression:=Temp;
  137. End;
  138.  
  139. Begin
  140. S:=CleanSpaces(S);
  141. ExpPtr:=1;
  142. BoolExpression:=SimpleExpression;
  143. End;
  144.  
  145. Function Expression( Expr       : String;
  146.                      Current    : ContextType):Boolean;
  147. Begin
  148. If Expr<>''
  149.    Then Expression:= BoolExpression(Expr,Current.Player,Current.Room)
  150.    Else Expression:=True;
  151. End;
  152. End.
  153. {$B-}